const fs = require("fs");

const fileService = require("../service/file.service");
const momentService = require("../service/moment.service");
const { PICTURE_PATH } = require("../constants/file-path");

class MomentController {
  async create(ctx, next) {
    //   1.获取数据(user_id,content)
    const userId = ctx.user.id;
    const content = ctx.request.body.content;
    console.log(userId, content);
    //2.将数据插入到数据库中
    const result = await momentService.create(userId, content);
    ctx.body = result;
  }
  async detail(ctx, next) {
    // 获取路径中的id
    const momentid = ctx.params.momentId;
    // 将id给到service进行查询
    const result = await momentService.getMomentById(momentid);

    ctx.body = result;
  }
  async list(ctx, next) {
    //   获取数据offset/size
    const { offset, size } = ctx.query;
    //2.根据offset和size查询数据库
    const result = await momentService.getMomentList(offset, size);
    ctx.body = result;
  }
  async update(ctx, next) {
    // 获取参数文章id和内容
    const { momentId } = ctx.params;
    const { content } = ctx.request.body;

    // 2.修改内容
    const result = await momentService.update(content, momentId);
    ctx.body = result;
  }

  // 删除
  async remove(ctx, next) {
    // 获取参数文章id
    const { momentId } = ctx.params;

    // 2.删除动态
    const result = await momentService.remove(momentId);
    ctx.body = result;
  }
  //  动态添加标签
  async addLabels(ctx, next) {
    // 1.获取标签和动态id
    const { labels } = ctx;
    const { momentId } = ctx.params;

    // // 2.添加所有的标签
    for (let label of labels) {
      // 2.1.判断标签是否已经和动态有关系
      const isExist = await momentService.hasLabel(momentId, label.id);
      if (!isExist) {
        await momentService.addLabel(momentId, label.id);
      }
    }

    ctx.body = "给动态添加标签成功~";
  }

  async fileInfo(ctx, next) {
    // http://localhost:8000/moment/images/d14d98b992dbac753b09d595414aba55
    // 从路径中取到filename
    let { filename } = ctx.params;
    // 根据filename查询数据库
    const fileInfo = await fileService.getFileByFilename(filename);
    //可以拼接一个type的参数，控制访问图片的大小  
    const { type } = ctx.query;
    // 有三个参数可选
    const types = ["small", "middle", "large"];
    // 判断传递的参数有没有，没有的话采用默认大小的图片
    if (types.some((item) => item === type)) {
      filename = filename + "-" + type;
    }

    // 取到关于本文件的详细信息，在把内容类型成文件的类型（设置响应类型）
    ctx.response.set("content-type", fileInfo.mimetype);
    // 最后以流的方式返回给客户端
    ctx.body = fs.createReadStream(`${PICTURE_PATH}/${filename}`);
  }
}
module.exports = new MomentController();
